package com.cskaoyan.javase.file._3api;

/**
 * @description: api的调用, 方法的使用
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

import java.io.File;
import java.io.IOException;

/**
 * API的使用仍然留个映像就行了,知道File对文件的操作能够做哪些事情就可以了
 *
 */
public class Demo {
    public static void main(String[] args) {
        //1.创建功能
        //只负责创建文件，目录路径如果不存在，会报错而不是帮你创建
        //该方法只负责创建文件,不会创建文件夹,即便不写后缀名,也是创建文件
        //public boolean createNewFile()
        /*File f = new File("e:\\1\\学习.mp4");
        //Unhandled exception: java.io.IOException
        System.out.println(f.createNewFile());

        File f1 = new File("E:\\1\\3\\1.txt");
        System.out.println(f1.createNewFile());
        File f2 = new File("e:\\1\\学习");
        System.out.println(f.createNewFile());*/


        //mkdir = make directory 创建文件夹/目录,不能创建文件,即便加后缀名
        //只负责创建目录，但只能创建单层目录，如果有多级目录不存在的话，创建失败
        //public boolean mkdir()
        //只负责创建目录，但可以创建多级目录，如果多级目录不存在，则帮你全部创建
        //public boolean mkdirs()
       /* File f = new File("E:\\1\\3");
        System.out.println(f.mkdir());

        File f1 = new File("E:\\1\\2\\3\\4");
        System.out.println(f1.mkdir());

        File f2 = new File("E:\\5\\4\\3\\2\\1");
        System.out.println(f2.mkdirs());

        File f3 = new File("E:\\1\\学习资料.mp3\\学习\\学个屁");
        System.out.println(f3.mkdirs());*/


        //2.删除功能
        // 删除此抽象路径名表示的文件或目录。
        // 如果是一个文件是可以直接删除的,但是如果此路径名表示一个目录，则该目录必须为空才能删除
        //public boolean delete()
        /**
         * 注意事项:
         *      1.该方法是通过调用系统API的本地方法实现的删除,所以它的删除是彻底删除,不是挪到回收站
         *          所以操作该方法要格外小心,删错了就无了
         *      2.该方法删除目录时,只能删除空目录,非空是无法删除的
         *      3.非空目录如何删除呢?
         *          要使用递归删除
         *       这个递归的基本思路:
         *          a.需要获取目录下所有文件的File对象
         *          b.需要方法来判断File对象表示的是文件夹还是文件,还需要判断是否是空目录
         *          c.空目录和文件直接删除,非空的就进去递归删除
         *
         *       递归中递归体: 如果是一个非空目录就需要递归删除
         *       递归的出口: 空目录和文件删除都是出口
         *
         *   特别提醒:
         *          晚上做作业时,要格外小心,不要递归把自己的文件全部删除了
         *          启动main方法时,再看一眼自己写的路径
         *
         */
        //File f = new File("E:\\1\\bbb");
        //System.out.println(f.delete());


        //3.移动或者重命名功能
        //public boolean renameTo(File dest)
        //- 当源文件和修改之后的目标文件，在同一目录的时候，效果只是重命名
        //- 当源文件和修改之后的目标文件，不在同一目录的时候，效果是移动且重命名
        //- 当源文件和修改之后的目标文件，同目录同名时，方法返回true，实际没有效果
        //- 真正操作文件，应该使用（IO流操作）
        /*File f1 = new File("E:\\3\\a.jpg");
        File f2 = new File("E:\\新垣结衣.jpg");
        System.out.println(f1.renameTo(f2));*/

        //4.判断功能
        //判断File对象是否表示的是一个文件,如果是文件就返回true,否者返回false
        //public boolean isFile()
        //判断File对象是否表示的是一个目录,如果是目录就返回true,否者返回false
        //public boolean isDirectory()

        //判断File对象表示的文件或目录，是否真实存在
        //public boolean exists()

       /* File f = new File("E:\\1");
        System.out.println(f.isFile());
        System.out.println(f.isDirectory());*/

        //判断File对象表示的文件，是否可读
        //public boolean canRead()
        //判断File对象表示的文件，是否可写
        //public boolean canWrite()
        //判断File对象表示的文件是否是隐藏文件
        //public boolean isHidden()

        //5.获取功能
        //获取File对象表示的抽象文件的绝对路径
        //public File getAbsolutePath()
        //获取File对象表示的抽象路径名的字符串，简单来说，创建的时候给的是什么就输出什么
        //public String getPath()
        File f = new File("E:\\1\\1.txt");
        System.out.println(f.getAbsolutePath());
        System.out.println(f.getPath());

        File f1 = new File("a.txt");
        System.out.println(f1.getAbsolutePath());
        System.out.println(f1.getPath());


        //获取File对象表示的文件或者目录的文件名
        //public String getName()
        File f2 = new File("E:\\1\\3");
        System.out.println(f.getName());
        System.out.println(f2.getName());


        //返回由此抽象路径名表示的文件的所占硬盘空间大小，以字节为单位
        //但是需要注意的是，这个方法只能获取文件的大小，不能获取目录大小
        //public long length()
        System.out.println(f.length());


        ////返回此File对象表示的文件的最后一次修改的时间
        //public long lastModified()
        System.out.println(f.lastModified());
        //1634701544246 时间戳 从格林威治时间1970年1月1日0点0分0秒到现在时间的毫秒值


    }
}
